#ifndef _SIMLE_EXCHANGER_H_
#define _SIMLE_EXCHANGER_H_

#include "parsers/base_parser.h"

namespace Exchanger
{
  class ForString : public BaseParser::BaseExchanger
  {
  public:
    virtual ~ForString();

    virtual ForString* Clone() const;
    virtual bool Read(const wxString& source, void* destination) const;
    virtual bool Write(const wxString& itemName, void* source, wxXmlNode* destination) const;
  };

  class ForDouble : public BaseParser::BaseExchanger
  {
  public:
    virtual ~ForDouble();

    virtual ForDouble* Clone() const;
    virtual bool Read(const wxString& source, void* destination) const;
    virtual bool Write(const wxString& itemName, void* source, wxXmlNode* destination) const;
  };

  class ForInteger : public BaseParser::BaseExchanger
  {
  public:
    virtual ~ForInteger();

    virtual ForInteger* Clone() const;
    virtual bool Read(const wxString& source, void* destination) const;
    virtual bool Write(const wxString& itemName, void* source, wxXmlNode* destination) const;
  };

  class ForBool : public BaseParser::BaseExchanger
  {
  public:
    virtual ~ForBool();

    virtual ForBool* Clone() const;
    virtual bool Read(const wxString& source, void* destination) const;
    virtual bool Write(const wxString& itemName, void* source, wxXmlNode* destination) const;
  };

  class ForBinaryFlag : public BaseParser::BaseExchanger
  {
  public:
    ForBinaryFlag(int mask);
    virtual ~ForBinaryFlag();

    virtual ForBinaryFlag* Clone() const;
    virtual bool Read(const wxString& source, void* destination) const;
    virtual bool Write(const wxString& itemName, void* source, wxXmlNode* destination) const;
  private:
    int Mask;
  };
} // end of Exchanger namespace

#endif // _SIMLE_EXCHANGER_H_
